import 'dart:io';

import 'package:flutter/material.dart';
import 'package:pull_to_refresh_flutter3/pull_to_refresh_flutter3.dart';
import 'package:xindong/common/xindong_sezhi.dart';

class XinDongRefreshComponents extends StatelessWidget {
  static const double footerHeight = 49.0;
  static const Color color = DZColors.mainColor;
  static const Color darkClassColor = Colors.white54;
  static const TextStyle textStyle = TextStyle(fontSize: 15, fontWeight: FontWeight.normal, color: DZColors.placeholderColor);
  final Widget child;

  const XinDongRefreshComponents({super.key, required this.child});

  @override
  Widget build(BuildContext context) {
    return RefreshConfiguration(
      // 配置默认头部指示器,假如你每个页面的头部指示器都一样的话,你需要设置这个
      headerBuilder:  () => header(),
      // 配置默认底部指示器
      footerBuilder: () => footer(),
      // 头部触发刷新的越界距离
      headerTriggerDistance: 50.0,
      // 自定义回弹动画,三个属性值意义请查询flutter api
      // springDescription: SpringDescription(stiffness: 170, damping: 16, mass: 1.9),
      // 头部最大可以拖动的范围,如果发生冲出视图范围区域,请设置这个属性
      maxOverScrollExtent: 100.0,
      // 底部最大可以拖动的范围
      maxUnderScrollExtent: 100.0,
      // 这个属性不兼容YeMianView和TabBarView,如果你特别需要TabBarView左右滑动,你需要把它设置为true
      enableScrollWhenRefreshCompleted: true,
      // 在加载失败的状态下,用户仍然可以通过手势上拉来触发加载更多
      enableLoadingWhenFailed: true,
      // Viewport不满一屏时,禁用上拉加载更多功能
      hideFooterWhenNotFull: false,
      // 可以通过惯性滑动触发加载更多
      enableBallisticLoad: true,
      child: child,
    );
  }

  // 进度指示器
  static Widget progressIndicator({bool isDark = false}) {
    return SizedBox(
      width: 20,
      height: 20,
      child: CircularProgressIndicator(
        strokeWidth: 2.5,
        valueColor: AlwaysStoppedAnimation<Color>(isDark ? darkClassColor : color),
      ),
    );
  }

  // 文本框
  static Widget textWidget(String text) {
    return Text(text, style: textStyle);
  }

  // 头部
  static Widget header({bool isDark = true}) {
    return WaterDropHeader(
      waterDropColor: isDark ? Colors.white54 : DZColors.mainLightColor,
      // refresh: progressIndicator(isDark: isDark),
      refresh: textWidget("加载中"),
      // 加载失败
      failed: textWidget("加载失败"),
      // 加载完成
      complete: textWidget("加载完成"),
      // 图标
      idleIcon: Icon(Icons.autorenew, size: 18, color: isDark ? Colors.black45 : color),
    );
  }

  // 尾部
  //ClassicFooter
  //CustomFooter
  static CustomFooter footer({bool isDark = false}) {
    return CustomFooter(
      height: footerHeight,
      builder: (BuildContext context, LoadStatus? status) {
        if (status == null) return progressIndicator();
        Widget body;
        switch (status) {
          case LoadStatus.idle: //上拉加载
            body = textWidget("上拉加载");
            break;
          case LoadStatus.loading: //加载中
            body = progressIndicator();
            break;
          case LoadStatus.failed: //加载失败！点击重试！
            body = textWidget("加载失败！再试试！");
            break;
          case LoadStatus.canLoading: //松手，加载更多!
            body = textWidget("松手，加载更多!");
            break;
          case LoadStatus.noMore: //没有更多数据了!
            body = textWidget("------  我是有底线的  ------");
            break;
          default: //重新试试!
            body = textWidget("重新试试!");
            break;
        }
        return SizedBox(
          height: footerHeight,
          child: Center(child: body),
        );
      },
    );
  }
}
